package com.skyline.search.search;

import java.io.IOException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import org.apache.lucene.analysis.Analyzer;

import com.skyline.search.config.Config;
import com.skyline.search.model.Page;
import com.skyline.search.model.ResultSet;

/**
 * Class <code>SearchProxy</code> Searcher的代理，通过SearchProxy来找到相应的Searcher
 * 
 * @author Jairus Chan
 * @version 0.1, 11/30/10
 * @since JDK1.6
 */

public interface SearchProxy extends Remote {

	/**
	 * inital(Config config) 通过Config里的参数来初始化各个Searcher
	 * 
	 * @param config
	 *            初始化参数
	 * @return
	 * @exception IOException
	 * @exception RemoteException
	 * @exception IOException
	 * @exception java.rmi.RemoteException
	 */
	void inital(Config config) throws IOException, RemoteException;

	/**
	 * search(String queryString, Page page,String[] fields, Analyzer analyzer,
	 * String index) 通过给定的Analyzer查询
	 * 
	 * @param queryString
	 *            查询词条
	 * @param page
	 *            用于记录查询的分页信息
	 * @param fields
	 *            所需查询的字段
	 * @param analyzer
	 *            查询所用的Analyzer
	 * @param index
	 *            所需查询的索引库
	 * @return ResultSet
	 * @exception IOException
	 * @exception java.rmi.RemoteException
	 */
	public ResultSet search(String queryString, Page page, String[] fields,
			Analyzer analyzer, String index) throws java.rmi.RemoteException;

	/**
	 * ResultSet searchWithStandardAnalyzer(String queryString, Page page,
	 * String[] fields, String index) 通过Lucene的标准Analyzer查询，内部实现是通过调用search()方法
	 * 
	 * @param queryString
	 *            查询词条
	 * @param page
	 *            用于记录查询的分页信息
	 * @param fields
	 *            所需查询的字段
	 * @param index
	 *            所需查询的索引库
	 * @return ResultSet
	 * @exception IOException
	 * @exception java.rmi.RemoteException
	 */
	public ResultSet searchWithStandardAnalyzer(String queryString, Page page,
			String[] fields, String index) throws java.rmi.RemoteException;

	/**
	 * searchWithDefaultAnalyzer(String queryString, Page page, String[] fields,
	 * String index) 通过用户自定义的默认Analyzer查询，内部实现是通过调用search()方法
	 * 
	 * @param queryString
	 *            查询词条
	 * @param page
	 *            用于记录查询的分页信息
	 * @param fields
	 *            所需查询的字段
	 * @param index
	 *            所需查询的索引库
	 * @return ResultSet
	 * @exception IOException
	 * @exception java.rmi.RemoteException
	 */
	public ResultSet searchWithDefaultAnalyzer(String queryString, Page page,
			String[] fields, String index) throws java.rmi.RemoteException;
}
